package P095_reinforceDeclareGenericActualType;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * Desc:&emsp;&ensp;强制声明泛型的实际类型
 *
 *
 * @author 李渊&emsp;liyuan7@yusys.com.cn
 * @version 1.0
 * 
 */
public class Foo {
    // Arrays.asList返回的List长度不可改变，这里手写一个
    public static <T> List<T> asList(T ...t){
        List<T> list = new ArrayList<T>();
        Collections.addAll(list,t);
        Arrays.asList(t);
        return list;
    }

    @Test
    public  void test1() {
        List<String> list1 = asList("A","B");
        // 按照Object处理
        List list2 = asList();
        // 强制声明
        List list3 = Foo.<Integer>asList();
        // list3也会按照Object处理
        List list4= asList(1,2,3.1);
        // 强制声明
        List list5= Foo.<Number>asList(1,2,3.1);

        // 总结：无法从代码中推断出泛型类型时，即可强制声明
    }
}
